package com.shiyun.disaster_station.utils;

import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

/**
 * 类 描 述: 基于HttpUrlConnection的Http客户端封装
 * 作   者: 史云
 * @author 史云
 * 版   本: 1.0.0
 * 时   间: 2021年12月01日  17:33:00
 */
@Slf4j
public class HttpUtils {

    /**
     * 方法描述: 获取GET请求
     * 作   者: 史 云
     * 时   间: 2021年12月01日 17:45:00
     */
    public static String get(String url){
        return HttpUtil.createGet(url).execute(false).body();
    }

    /**
     * 方法描述: 获取GET请求
     * 作   者: 史 云
     * 时   间: 2021年12月01日 17:45:00
     */
    public static String get(String url, Map<String, String> header){
        return HttpUtil.createGet(url).headerMap(header,true).execute().body();
    }

    /**
     * 方法描述: 获取POST请求
     * 作   者: 史 云
     * 时   间: 2021年12月07日 15:55:00
     */
    public static String post(String url, JSONObject param){
        HttpRequest post = HttpUtil.createPost(url);
        return post.body(param.toString()).execute().body();
    }

    /**
     * 方法描述: POST请求上传文件
     * 作   者: 史 云
     * 时   间: 2021年12月07日 16:06:00
     */
    public static String postFile(String url, File file){
        HttpRequest post = HttpUtil.createPost(url);

        post.form("file", file);
        post.header(Header.CONTENT_TYPE,"multipart/form-data; boundary=--------------------------491065134022873388113754");
        post.header(Header.ACCEPT,"*/*");
        return post.execute().body();
    }

    /**
     * 方法描述: 获取文件名称
     * 作   者: 史 云
     * 时   间: 2021年12月19日 13:38:00
     */
    public static String getFileName(String pic){
        String picUrl = pic.split("\\?")[0];
        String[] slashArr = picUrl.split("/");
        return slashArr[slashArr.length - 1];
    }

    /**
     * 方法描述: 获取文件
     * 作   者: 史 云
     * 时   间: 2022年02月25日 17:52:00
     */
    public static File downloadFileFromUrl(String url){
        // 获取文件流
        return HttpUtil.downloadFileFromUrl(url, "/temp/"+getFileName(url));
    }

    /**
     * 方法描述: 获取文件流
     * 作   者: 史 云
     * 时   间: 2022年02月25日 17:55:00
     */
    public static InputStream downloadInputStreamFromUrl(String url) {
        File file = downloadFileFromUrl(url);
        try {
            return file.toURL().openStream();
        } catch (IOException e) {
            log.error(e.getMessage(),e);
            return null;
        }
    }


}
